function mxActor(bounds, fill, stroke, strokewidth)
{
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = strokewidth || 1;
};
mxActor.prototype = new mxShape();
mxActor.prototype.constructor = mxActor;
mxActor.prototype.mixedModeHtml = false;
mxActor.prototype.preferModeHtml = false;
mxActor.prototype.createVml = function()
{
	var node = document.createElement('v:shape');
	this.configureVmlShape(node);
	return node;
};
mxActor.prototype.redrawVml = function()
{
	this.updateVmlShape(this.node);
	var w = Math.floor(this.bounds.width);
	var h = Math.floor(this.bounds.height);
	var s = this.strokewidth * this.scale;
	this.node.setAttribute('coordsize', w + ',' + h);
	this.node.setAttribute('strokeweight', s);
	var d = this.createPath();
	this.node.setAttribute('path', d);
};
mxActor.prototype.createSvg = function()
{
	return this.createSvgGroup('path');
};
mxActor.prototype.redrawSvg = function()
{
	var strokeWidth = Math.max(1, this.strokewidth * this.scale);
	this.innerNode.setAttribute('stroke-width', strokeWidth);
	var d = this.createPath();
	this.innerNode.setAttribute('d', d);
	this.updateSvgTransform(this.innerNode, false);

	if (this.shadowNode != null)
	{
		this.shadowNode.setAttribute('stroke-width', strokeWidth);
		this.shadowNode.setAttribute('d', d);
		this.updateSvgTransform(this.shadowNode, true);
	}
};
mxActor.prototype.redrawPath = function(path, x, y, w, h)
{
	var width = w / 3;
	path.moveTo(0, h);
	path.curveTo(0, 3 * h / 5, 0, 2 * h / 5, w / 2, 2 * h / 5);
	path.curveTo(w / 2 - width, 2 * h / 5, w / 2 - width, 0, w / 2, 0);
	path.curveTo(w / 2 + width, 0, w / 2 + width, 2 * h / 5, w / 2, 2 * h / 5);
	path.curveTo(w, 2 * h / 5, w, 3 * h / 5, w, h);
	path.close();
};

function mxCloud(bounds, fill, stroke, strokewidth)
{
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = strokewidth || 1;
};
mxCloud.prototype = new mxActor();
mxCloud.prototype.constructor = mxActor;
mxCloud.prototype.redrawPath = function(path, x, y, w, h)
{
	path.moveTo(0.25 * w, 0.25 * h);
	path.curveTo(0.05 * w, 0.25 * h, 0, 0.5 * h, 0.16 * w, 0.55 * h);
	path.curveTo(0, 0.66 * h, 0.18 * w, 0.9 * h, 0.31 * w, 0.8 * h);
	path.curveTo(0.4 * w, h, 0.7 * w, h, 0.8 * w, 0.8 * h);
	path.curveTo(w, 0.8 * h, w, 0.6 * h, 0.875 * w, 0.5 * h);
	path.curveTo(w, 0.3 * h, 0.8 * w, 0.1 * h, 0.625 * w, 0.2 * h);
	path.curveTo(0.5 * w, 0.05 * h, 0.3 * w, 0.05 * h, 0.25 * w, 0.25 * h);
	path.close();
};

function mxHexagon()
{
};
mxHexagon.prototype = new mxActor();
mxHexagon.prototype.constructor = mxHexagon;
mxHexagon.prototype.redrawPath = function(path, x, y, w, h)
{
	var dir = this.style[mxConstants.STYLE_DIRECTION];

	if (dir == mxConstants.DIRECTION_NORTH || dir == mxConstants.DIRECTION_SOUTH)
	{
		path.moveTo(0.5 * w, 0);
		path.lineTo(w, 0.25 * h);
		path.lineTo(w, 0.75 * h);
		path.lineTo(0.5 * w, h);
		path.lineTo(0, 0.75 * h);
		path.lineTo(0, 0.25 * h);
	}
	else
	{
		path.moveTo(0.25 * w, 0);
		path.lineTo(0.75 * w, 0);
		path.lineTo(w, 0.5 * h);
		path.lineTo(0.75 * w, h);
		path.lineTo(0.25 * w, h);
		path.lineTo(0, 0.5 * h);
	}
	path.close();
};

function mxTriangle()
{
};
mxTriangle.prototype = new mxActor();
mxTriangle.prototype.constructor = mxTriangle;
mxTriangle.prototype.redrawPath = function(path, x, y, w, h)
{
	var dir = this.style[mxConstants.STYLE_DIRECTION];

	if (dir == mxConstants.DIRECTION_NORTH)
	{
		path.moveTo(0, h);
		path.lineTo(0.5 * w, 0);
		path.lineTo(w, h);
	}
	else if (dir == mxConstants.DIRECTION_SOUTH)
	{
		path.moveTo(0, 0);
		path.lineTo(0.5 * w, h);
		path.lineTo(w, 0);
	}
	else if (dir == mxConstants.DIRECTION_WEST)
	{
		path.moveTo(w, 0);
		path.lineTo(0, 0.5 * h);
		path.lineTo(w, h);
	}
	else
	{
		path.moveTo(0, 0);
		path.lineTo(w, 0.5 * h);
		path.lineTo(0, h);
	}
	path.close();
};